package gui.estoque;

import java.awt.event.ActionEvent;
import java.sql.SQLException;

import javax.swing.JOptionPane;

import excecoes.estoque.DinheiroNegativoException;
import excecoes.estoque.NenhumProdutoEncontradoException;
import excecoes.estoque.QuantidadeNegativaException;
import smartMarket.estoque.Produto;
import banco.estoque.BancoProduto;
import gui.JFrameTableBanco;
import java.util.Vector;

@SuppressWarnings("serial")
public class JFrameTableEstoque extends JFrameTableBanco {

    // Atributos
    private BancoProduto estoque;
    private boolean      buscar;

    // Construtor
    public JFrameTableEstoque() {
        super("Estoque");

        this.addColuna("Código");
        this.addColuna("Código de Barras");
        this.addColuna("Descrição");
        this.addColuna("Preço");
        this.addColuna("Custo");
        this.addColuna("Quantidade");

        this.estoque = new BancoProduto();

        this.listaBanco();
    }

    // Métodos    
    private void listaBanco() {
        try {
            BancoProduto bp = new BancoProduto();
            Vector<Produto> produtos;
            produtos = bp.listar();

            for (Produto produto : produtos) {
                this.addLinha(new Object[]{produto.getCodigo(),
                            produto.getCodigoDeBarras(),
                            produto.getDescricao(),
                            produto.getPreco(),
                            produto.getCusto(),
                            produto.getQuantidade()});
            }
        } catch (NumberFormatException e) {
        } catch (SQLException e) {
        } catch (DinheiroNegativoException e) {
        } catch (QuantidadeNegativaException e) {
        }
    }

    // Eventos
    @Override
    protected void jButtonNovoActionPerformed(ActionEvent evt) {
        if (buscar) {
            limpaBanco();
            listaBanco();
            buscar = false;
        }
        new JFrameNovoProduto().setVisible(true);
    }

    @Override
    protected void jButtonAlterarActionPerformed(ActionEvent evt) {
        if (buscar) {
            limpaBanco();
            listaBanco();
            buscar = false;
        }
        int linha = jTableBanco.getSelectedRow();
        String codigoDeBarras = (String) model.getValueAt(linha, 1);
        new JFrameNovoProduto(codigoDeBarras, linha).setVisible(true);
        
        
        
    }

    @Override
    protected void jButtonExcluirActionPerformed(ActionEvent evt) {

        int linha = jTableBanco.getSelectedRow();
        int codigo = Integer.parseInt( "" + model.getValueAt(linha, 0) );

        Produto produto;
        try {
            produto = estoque.buscar(codigo);
            estoque.excluir(produto);

            JFrameTableEstoque.model.removeRow(linha);

            JOptionPane.showMessageDialog(null, "O produto foi excluído com sucesso");

        } catch (NumberFormatException e) {
        } catch (SQLException e) {
        } catch (DinheiroNegativoException e) {
        } catch (QuantidadeNegativaException e) {
        } catch (NenhumProdutoEncontradoException e) {
        }
    }

    @Override
    protected void jButtonBuscarActionPerformed(ActionEvent evt) {
        JDialogBuscarProduto jDialogBuscarProduto = new JDialogBuscarProduto(this, rootPaneCheckingEnabled);
        jDialogBuscarProduto.setVisible(true);
        this.buscar = true;
    }
}
